Skip to content

Vite 插件 · Vitest · 与 webpack 对比

官方索引:Plugins API · Vitest


1. Vite 插件是什么?

Vite 插件兼容 Rollup 插件接口,并扩展 vite 独有钩子(如解析 HTML、转换索引、配置开发服务器)。

常用钩子心智:

场景钩子方向
改模块内容transform(Rollup 通用)
解析路径resolveId
开发服务器:中间件、代理扩展configureServer
预览服务器configurePreviewServer
整个配置合并config / configResolved

编写时注意:apply: 'serve' | 'build' 可限定插件只在开发或构建生效。


2. Vitest 与 Vite 共用配置

Vitest 测试运行器复用 同一套解析与插件管道vitest.configmergeConfig 引用 vite.config,减少「测试环境与线上构建不一致」导致的假绿。

补充说明:单测里的别名、resolve.aliasdefine 与正式构建对齐成本低。


3. webpack vs Vite(简要表述模板)

开发体验

  • Vite:原生 ESM + esbuild 预构建依赖,冷启动快;HMR 边界落在模块级。
  • webpack:传统打包驱动开发服务器(webpack-dev-server),大项目冷启动与初次编译可能更慢;生态成熟、可定制级极高。

生产构建

  • ViteRollup 产出,默认压缩 esbuild;插件即 Rollup 生态。
  • webpack:自带完整流程;Loader + Plugin 模型深入人心;Module Federation、遗留浏览器支持方案成熟。

选型直觉

  • 新项目、以现代化浏览器为主、追求开发反馈速度 → Vite 常见。
  • 强依赖 webpack 独有插件链、复杂联邦方案或存量配置迁移成本高 → 继续 webpack 或渐进迁移。

4. 延伸要点

Q:为什么说 Vite 生产构建「不一定比 webpack 更快」?
大型项目最终都要经 Rollup/webpack 完整打包与压缩;Vite 的优势主要体现在开发阶段

Q:import.meta.glob 干什么?
Vite 提供的基于 ESM 的按需批量导入(如多路由模块),编译期展开为静态映射。

Q:环境变量为何必须 VITE_ 前缀?
防止无意把机密注入客户端包;仅 VITE_ 暴露给前端代码(详见工程实践篇 .env 约定)。


5. 延伸阅读(站内)

  • [依赖预构建与 Rollup](./04、依赖预构建·生产构建与 Rollup.md)
  • [webpack 常见问题精要](../webpack/05、webpack 常见问题精要.md)